<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>12_1_2-简单的Vue-Router例子</title>
</head>

<body>


    <script src="https://unpkg.com/vue@3"></script>
    <script src="https://unpkg.com/vue-router@4"></script>


        <div id="app">
            <h1>Hello App!</h1>
            <p>
                <!--使用 router-link 组件进行导航 -->
                <!--通过传递 `to` 来指定链接 -->
                <!--`<router-link>` 将呈现一个带有正确 `href` 属性的 `<a>` 标签-->
                <router-link to="/">回到首页</router-link> <br />
                <router-link to="/about">去关于页</router-link> <br />
                <router-link to="/users/">去往用户名页面</router-link> <br />
                <router-link to="/users/@/posts/&">去往用户名和ID页面</router-link> <br />
                <router-link to="/users_tc/!">去往弹窗页面</router-link> <br />
                <router-link to="/user-:afterUser(.*)">去往捕获路由页面</router-link> <br />
            </p>
            <!-- 路由出口 -->
            <!-- 路由匹配到的组件将渲染在这里 -->
            <router-view></router-view>
        </div>
        <script>
            // 1. 定义路由组件.
            // 也可以从其他文件导入
            const Home = { template: '<div>Home</div>' }
            const About = { template: '<div>About</div>' }
            const User = { template: '<div>这里是User界面<h2>您的ID是：{{ $route.params.id }}</h2></div>' }
            const User_Id = { template: '<div>这里是用户和ID页面，您的用户名是：{{ $route.params.user_id }}，您的ID是：{{ $route.params.post_id }}</div>' }
            //响应路由参数的变化
            const User_Tc = {
                //当用户从 /users/johnny 导航到 /users/jolyne 时，相同的组件实例将被重复使用。
                //组件的生命周期钩子不会被调用
                template: '这里是检测生命周期函数，会有一个弹窗，参数是：{{ $route.params.user_id }}',
                created() {
                    this.$watch(
                        () => this.$route.params,
                        (toParams, previousParams) => {
                            // 对路由变化做出响应...
                            alert("路由变化了")

                        }
                    )
                },
            }

            //捕获所有路由或 404 Not found 路由
            const UserGeneric = { template: '<div>我将捕获所有路由，您此时的路由参数是{{ $route.params.afterUser }}</div>' }


            // 2. 定义一些路由
            // 每个路由都需要映射到一个组件。
            // 我们后面再讨论嵌套路由。
            const routes = [
                { path: '/', component: Home },
                { path: '/about', component: About },
                { path: '/users/:id', component: User },
                { path: '/users/:user_id/posts/:post_id', component: User_Id },
                { path: '/users_tc/:user_id', component: User_Tc },

                // 将匹配以 `/user-` 开头的所有内容，并将其放在 `$route.params.afterUser` 下
                { path: '/user-:afterUser(.*)', component: UserGeneric },
            ]

            // 3. 创建路由实例并传递 `routes` 配置
            // 你可以在这里输入更多的配置，但我们在这里
            // 暂时保持简单
            const router = VueRouter.createRouter({
                // 4. 内部提供了 history 模式的实现。为了简单起见，我们在这里使用 hash 模式。
                history: VueRouter.createWebHashHistory(),
                routes, // `routes: routes` 的缩写
            })

            // 5. 创建并挂载根实例
            const app = Vue.createApp({})
            //确保 _use_ 路由实例使
            //整个应用支持路由。
            app.use(router)

            app.mount('#app')

// 现在，应用已经启动了！
        </script>
    </body>

</html>